package com.mrzhou.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * 使用Callable创建java线程
 *
 * @author qiang.zhou
 */
public class CreateThreadCallable {

    public static void main(String[] args) throws Exception {
        // 使用FutureTask包装Callable对象
        FutureTask<Integer> task = new FutureTask<>(() -> {
            int i = 0;
            for( ; i < 100; i++) {
                System.out.println(String.format("%s 的循环变量的值 【%d】", Thread.currentThread().getName(), i));
            }
            // call方法可以返回线程处理的结果
            return i;
        });

        for(int i = 0; i < 100; i++) {
            System.out.println(String.format("%s 的循环变量的值 【%d】", Thread.currentThread().getName(), i));
            // 在主线程执行20次后创建线程， 延迟子线程开启时间
            if (i == 20) {
                new Thread(task, "返回值线程").start();
            }
        }
        System.out.println("获取子线程返回的值：" + task.get());
    }


}
